package com.erp.order.domain.bo;

import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import com.ruoyi.common.core.web.oldDomain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;

/**
 * 线上物流订单信息业务对象 erp_warehouse_order_info
 *
 * @author erp
 * @date 2023-04-24
 */

@Data
@EqualsAndHashCode(callSuper = true)
public class ErpWarehouseOrderInfoBo extends BaseEntity {

    /**
     * 主键
     */
    @NotNull(message = "主键不能为空", groups = { EditGroup.class })
    private Long id;

    @NotNull(message = "店铺id", groups = { EditGroup.class })
    private String sellerId;

    /**
     * 卖家后台地址id,用来获取卖家详细地址信息
     */
    @NotNull(message = "卖家后台地址id,用来获取卖家详细地址信息不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long senderAddressId;

    /**
     * 卖家后台地址id,用来获取卖家详细地址信息
     */
    @NotNull(message = "卖家后台地址id,用来获取卖家详细地址信息不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long receiverAddressId;

    /**
     * 卖家揽收地址id
     */
    @NotBlank(message = "卖家揽收地址id不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long pickupAddressId;

    /**
     * 判断是否属于非液体化妆品
     */
    @NotBlank(message = "判断是否属于非液体化妆品不能为空", groups = { AddGroup.class, EditGroup.class })
    private String aneroidMarkup;

    /**
     * 是否易碎
     */
    @NotBlank(message = "是否易碎不能为空", groups = { AddGroup.class, EditGroup.class })
    private String breakable;

    /**
     * 类目中文名称
     */
    @NotBlank(message = "类目中文名称不能为空", groups = { AddGroup.class, EditGroup.class })
    private String categoryCnDesc;

    /**
     * 类目英文名称
     */
    @NotBlank(message = "类目英文名称不能为空", groups = { AddGroup.class, EditGroup.class })
    private String categoryEnDesc;

    /**
     * 是否包含电池
     */
    @NotBlank(message = "是否包含电池不能为空", groups = { AddGroup.class, EditGroup.class })
    private String containsBattery;

    /**
     * 海关编码
     */
    @NotBlank(message = "海关编码不能为空", groups = { AddGroup.class, EditGroup.class })
    private String hsCode;

    /**
     * 是否纯电池
     */
    @NotBlank(message = "是否纯电池不能为空", groups = { AddGroup.class, EditGroup.class })
    private String onlyBattery;

    /**
     * 产品申报金额
     */
    @NotBlank(message = "产品申报金额不能为空", groups = { AddGroup.class, EditGroup.class })
    private String productDeclareAmount;

    /**
     * 商品ID
     */
    @NotNull(message = "商品ID不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long productId;

    /**
     * 产品数量
     */
    @NotNull(message = "产品数量不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long productNum;

    /**
     * 产品重量
     */
    @NotBlank(message = "产品重量不能为空", groups = { AddGroup.class, EditGroup.class })
    private String productWeight;

    /**
     * scItem code
     */
    @NotBlank(message = "scItem code不能为空", groups = { AddGroup.class, EditGroup.class })
    private String scItemCode;

    /**
     * scItem id
     */
    @NotNull(message = "scItem id不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long scItemId;

    /**
     * scItem name
     */
    @NotBlank(message = "scItem name不能为空", groups = { AddGroup.class, EditGroup.class })
    private String scItemName;

    /**
     * sku code
     */
    @NotBlank(message = "sku code不能为空", groups = { AddGroup.class, EditGroup.class })
    private String skuCode;

    /**
     * sku value
     */
    @NotBlank(message = "sku value不能为空", groups = { AddGroup.class, EditGroup.class })
    private String skuValue;

    /**
     * 是否特货
     */
    @NotBlank(message = "是否特货不能为空", groups = { AddGroup.class, EditGroup.class })
    private String containsSpecialGoods;

    /**
     * 交易子单号
     */
    @NotNull(message = "交易子单号不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long childOrderId;

    /**
     * 包裹数量： 创建国家小包订单时非必填，创建国家快递订单时必填
     */
    @NotNull(message = "包裹数量： 创建国家小包订单时非必填，创建国家快递订单时必填不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long packageNum;

    /**
     * 订单来源
     */
    @NotBlank(message = "订单来源不能为空", groups = { AddGroup.class, EditGroup.class })
    private String tradeOrderFrom;

    /**
     * 交易订单号
     */
    @NotNull(message = "交易订单号不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long tradeOrderId;

    /**
     * 不可达处理(退回:0/销毁:1);详情请参考：http://bbs.seller.aliexpress.com/bbs/read.php?tid=514111
     */
    @NotBlank(message = "不可达处理(退回:0/销毁:1);详情请参考：http://bbs.seller.aliexpress.com/bbs/read.php?tid=514111不能为空", groups = { AddGroup.class, EditGroup.class })
    private String undeliverableDecision;

    /**
     * 发票号（可空）
     */
    @NotBlank(message = "发票号（可空）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String invoiceNumber;

    /**
     * ISV用户唯一标识，一般为userId,最大长度为16个字符
     */
    @NotBlank(message = "ISV用户唯一标识，一般为userId,最大长度为16个字符不能为空", groups = { AddGroup.class, EditGroup.class })
    private String topUserKey;

    /**
     * 包裹保额-分
     */
    @NotNull(message = "包裹保额-分不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal insuranceCoverageCent;

    /**
     * 币种三字码
     */
    @NotBlank(message = "币种三字码不能为空", groups = { AddGroup.class, EditGroup.class })
    private String insuranceCoverageCurrencyCode;

    /**
     * 是否同意升级逆向高货值保险
     */
    @NotBlank(message = "是否同意升级逆向高货值保险不能为空", groups = { AddGroup.class, EditGroup.class })
    private String isAgreeUpgradeReverseParcelInsure;

    /**
     * 线上发货物流方案
     */
    @NotBlank(message = "线上发货物流方案不能为空", groups = { AddGroup.class, EditGroup.class })
    private String warehouseCarrierService;

    private String solutionCode;



    /**
     * 线上发货物流面单;通过国际订单号获取的body内容用base64转码后生成运单标签的pdf字节流。
     */
    @NotBlank(message = "线上发货物流面单;通过国际订单号获取的body内容用base64转码后生成运单标签的pdf字节流。不能为空", groups = { AddGroup.class, EditGroup.class })
    private String onlineLogisticsLabel;

    /**
     * LP单号
     */
    @NotBlank(message = "LP单号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String outOrderCode;

    /**
     * 外部订单号
     */
    @NotBlank(message = "外部订单号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String outOrderId;

    /**
     * 物流订单号
     */
    @NotBlank(message = "物流订单号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String warehouseOrderId;

    /**
     * 国际运单号
     */
    @NotBlank(message = "国际运单号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String intlTrackingNo;

    /**
     * 状态 1-待预约 2-已预约 0-已取消
     */
    @NotNull(message = "状态", groups = { AddGroup.class, EditGroup.class })
    private Integer status;

    /**
     * 国内运单号
     */
    @NotBlank(message = "国内运单号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String trackingNo;

    /**
     * 乐观锁
     */
//    @NotBlank(message = "乐观锁不能为空", groups = { AddGroup.class, EditGroup.class })
    private String revision;

    /**
     * OC号
     */
    private String consignmentNo;


}
